<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<title>FLITr: flitr::ImageProducer Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">FLITr
   &#160;<span id="projectnumber">1.x</span>
   </div>
   <div id="projectbrief">Framework for Live Image Transformation.</div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.1.2 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="pages.html"><span>Related&#160;Pages</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="classes.html"><span>Class&#160;Index</span></a></li>
      <li><a href="inherits.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('classflitr_1_1_image_producer.html','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Friends</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(11)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="summary">
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="#pro-methods">Protected Member Functions</a> &#124;
<a href="#pro-attribs">Protected Attributes</a> &#124;
<a href="#friends">Friends</a> &#124;
<a href="classflitr_1_1_image_producer-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">flitr::ImageProducer Class Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p><code>#include &lt;<a class="el" href="image__producer_8h_source.html">image_producer.h</a>&gt;</code></p>
<div class="dynheader">
Inheritance diagram for flitr::ImageProducer:</div>
<div class="dyncontent">
<div class="center"><img src="classflitr_1_1_image_producer__inherit__graph.png" border="0" usemap="#flitr_1_1_image_producer_inherit__map" alt="Inheritance graph"/></div>
<map name="flitr_1_1_image_producer_inherit__map" id="flitr_1_1_image_producer_inherit__map">
<area shape="rect" id="node3" href="classflitr_1_1_f_fmpeg_producer.html" title="{flitr::FFmpegProducer\n|&#45; filename_\l&#45; Reader_\l&#45; MetadataReader_\l&#45; DefaultMetadata_\l&#45; NumImages_\l&#45; CurrentImage_\l&#45; buffer_size_\l|+ FFmpegProducer()\l+ setAutoLoadMetaData()\l+ init()\l+ trigger()\l+ seek()\l+ getNumImages()\l+ getCurrentImage()\l+ getFrameRate()\l}" alt="" coords="5,469,176,779"/><area shape="rect" id="node5" href="classflitr_1_1_multi_f_fmpeg_producer.html" title="{flitr::MultiFFmpegProducer\n|&#45; Producers_\l&#45; Consumers_\l&#45; ProducerThreads_\l&#45; ProducerThreadBarrier_\l&#45; NumImages_\l&#45; CurrentImage_\l&#45; ImagesPerSlot_\l&#45; SeekPos_\l&#45; SeekOK_\l&#45; OutputImageVector_\l&#45; buffer_size_\l|+ MultiFFmpegProducer()\l+ ~MultiFFmpegProducer()\l+ setAutoLoadMetaData()\l+ init()\l+ trigger()\l+ seek()\l+ releaseReadSlotCallback()\l+ getNumImages()\l+ getCurrentImage()\l+ getFrameRate()\l}" alt="" coords="200,417,389,831"/><area shape="rect" id="node7" href="classflitr_1_1_screen_capture_producer.html" title="{flitr::ScreenCaptureProducer\n|&#45; view_\l&#45; cb_\l&#45; buffer_size_\l&#45; capture_every_nth_\l&#45; trigger_count_\l&#45; do_capture_\l|+ ScreenCaptureProducer()\l+ init()\l+ shouldCaptureNow()\l+ startCapture()\l+ stopCapture()\l}" alt="" coords="413,503,600,745"/><area shape="rect" id="node9" href="classflitr_1_1_s_multi_f_fmpeg_producer.html" title="{flitr::SMultiFFmpegProducer\n|&#45; Readers_\l&#45; ImagesPerSlot_\l&#45; Filenames_\l&#45; out_pix_fmt_\l&#45; NumImages_\l&#45; CurrentImage_\l&#45; buffer_size_\l|+ SMultiFFmpegProducer()\l+ init()\l+ trigger()\l+ seek()\l+ getNumImages()\l+ getCurrentImage()\l+ getFrameRate()\l}" alt="" coords="624,477,808,771"/><area shape="rect" id="node11" href="classflitr_1_1_texture_capture_producer.html" title="{flitr::TextureCaptureProducer\n|&#45; InputTexture_\l&#45; OutputTexture_\l&#45; OutputFormat_\l&#45; RootGroup_\l&#45; Camera_\l&#45; FragmentProgram_\l&#45; StateSet_\l&#45; InputTextureWidth_\l&#45; InputTextureHeight_\l&#45; OutputTextureWidth_\l&#45; OutputTextureHeight_\l&#45; KeepAspect_\l&#45; BufferSize_\l&#45; enabled_\l&#45; SaveNextImageTo_\l|+ TextureCaptureProducer()\l+ init()\l+ getRoot()\l+ getOutputTexture()\l+ setEnable()\l+ setShader()\l+ saveNextImage()\l&#45; createTexturedQuad()\l&#45; setupCamera()\l&#45; createTextures()\l}" alt="" coords="832,382,1021,866"/><area shape="rect" id="node13" href="class_test_producer.html" title="{TestProducer\n|&#45; bufferSize_\l&#45; notified_\l|+ TestProducer()\l+ init()\l+ testOverflow()\l+ reserveOne()\l+ releaseOne()\l+ releaseReadSlotCallback()\l+ resetNotified()\l+ getNotified()\l}" alt="" coords="1045,512,1235,736"/></map>
</div>
<div class="dynheader">
Collaboration diagram for flitr::ImageProducer:</div>
<div class="dyncontent">
<div class="center"><img src="classflitr_1_1_image_producer__coll__graph.png" border="0" usemap="#flitr_1_1_image_producer_coll__map" alt="Collaboration graph"/></div>
<map name="flitr_1_1_image_producer_coll__map" id="flitr_1_1_image_producer_coll__map">
</map>
</div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:a8583220986b69727f8f5a9ace9b19e5d"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a8583220986b69727f8f5a9ace9b19e5d">ImageProducer</a> ()</td></tr>
<tr class="memitem:a6c3207104e7872fce9f98e5bd637b58b"><td class="memItemLeft" align="right" valign="top">virtual&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a6c3207104e7872fce9f98e5bd637b58b">~ImageProducer</a> ()</td></tr>
<tr class="memitem:a0bb6c0260a3bf3f4da7e362f579db4c9"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a0bb6c0260a3bf3f4da7e362f579db4c9">init</a> ()=0</td></tr>
<tr class="memitem:a9495277a8122ec0f7cfb63dc83ceb955"><td class="memItemLeft" align="right" valign="top">virtual <a class="el" href="classflitr_1_1_image_format.html">ImageFormat</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a9495277a8122ec0f7cfb63dc83ceb955">getFormat</a> (uint32_t index=0)</td></tr>
<tr class="memitem:a5b34bbd15e5e3f50cec63bb4b7180356"><td class="memItemLeft" align="right" valign="top">virtual uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a5b34bbd15e5e3f50cec63bb4b7180356">getNumWriteSlotsAvailable</a> () const </td></tr>
<tr class="memitem:af86fed83f474ab9889ab9502776908b8"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#af86fed83f474ab9889ab9502776908b8">trigger</a> ()</td></tr>
<tr class="memitem:a636b354578c50ba0ca2b7bd4f98842fc"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a636b354578c50ba0ca2b7bd4f98842fc">seek</a> (uint32_t position)</td></tr>
<tr class="memitem:ada8987ae6f2e72ada31d702816b1e164"><td class="memItemLeft" align="right" valign="top">virtual uint32_t&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#ada8987ae6f2e72ada31d702816b1e164">getLeastNumReadSlotsAvailable</a> ()</td></tr>
<tr class="memitem:a2b781f13e6fdf65609fbb2ac3f6419c5"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a2b781f13e6fdf65609fbb2ac3f6419c5">setCreateMetadataFunction</a> (<a class="el" href="namespaceflitr.html#a4809c2cffdcf7a5370102b956fcd09dc">CreateMetadataFunction</a> f)</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="pro-methods"></a>
Protected Member Functions</h2></td></tr>
<tr class="memitem:a01eb729f570f48453719a037c4dd85d9"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a01eb729f570f48453719a037c4dd85d9">releaseReadSlotCallback</a> ()</td></tr>
<tr class="memitem:a3e642e35715da06dc327e71c92c6e848"><td class="memItemLeft" align="right" valign="top">virtual bool&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a3e642e35715da06dc327e71c92c6e848">addConsumer</a> (<a class="el" href="classflitr_1_1_image_consumer.html">ImageConsumer</a> &amp;consumer)</td></tr>
<tr class="memitem:a50cb5b2cd533974cddfa7561e2dd743a"><td class="memItemLeft" align="right" valign="top">virtual std::vector&lt; <a class="el" href="classflitr_1_1_image.html">Image</a> ** &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a50cb5b2cd533974cddfa7561e2dd743a">reserveWriteSlot</a> ()</td></tr>
<tr class="memitem:a5dd9a012d296b7bdb7df86d59f3f1b91"><td class="memItemLeft" align="right" valign="top">virtual void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a5dd9a012d296b7bdb7df86d59f3f1b91">releaseWriteSlot</a> ()</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="pro-attribs"></a>
Protected Attributes</h2></td></tr>
<tr class="memitem:a72e945d24bb382258f9a0630fb48398a"><td class="memItemLeft" align="right" valign="top">std::vector&lt; <a class="el" href="classflitr_1_1_image_format.html">ImageFormat</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a72e945d24bb382258f9a0630fb48398a">ImageFormat_</a></td></tr>
<tr class="memdesc:a72e945d24bb382258f9a0630fb48398a"><td class="mdescLeft">&#160;</td><td class="mdescRight">A vector of the formats of the images is produced per slot.  <a href="#a72e945d24bb382258f9a0630fb48398a"></a><br/></td></tr>
<tr class="memitem:aab3c5af29ab27646422bb9c182be0464"><td class="memItemLeft" align="right" valign="top">std::tr1::shared_ptr<br class="typebreak"/>
&lt; <a class="el" href="classflitr_1_1_shared_image_buffer.html">SharedImageBuffer</a> &gt;&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#aab3c5af29ab27646422bb9c182be0464">SharedImageBuffer_</a></td></tr>
<tr class="memdesc:aab3c5af29ab27646422bb9c182be0464"><td class="mdescLeft">&#160;</td><td class="mdescRight">The shared buffer used for this producer and all consumers.  <a href="#aab3c5af29ab27646422bb9c182be0464"></a><br/></td></tr>
<tr class="memitem:a16f3600ed2852ed26b9d77bd760d897a"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceflitr.html#a4809c2cffdcf7a5370102b956fcd09dc">CreateMetadataFunction</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a16f3600ed2852ed26b9d77bd760d897a">CreateMetadataFunction_</a></td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2><a name="friends"></a>
Friends</h2></td></tr>
<tr class="memitem:a18f6db6520dbb1db232988e6ad29e289"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#a18f6db6520dbb1db232988e6ad29e289">SharedImageBuffer</a></td></tr>
<tr class="memitem:aeeb1f6ea1886f315310caaf57b3064bd"><td class="memItemLeft" align="right" valign="top">class&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classflitr_1_1_image_producer.html#aeeb1f6ea1886f315310caaf57b3064bd">ImageConsumer</a></td></tr>
</table>
<a name="details" id="details"></a><h2>Detailed Description</h2>
<div class="textblock"><p>The base class for image producers.</p>
<p>The <a class="el" href="classflitr_1_1_image_producer.html">ImageProducer</a> class is the base for all image producers. It contains the buffer used for storing or referring to images and places images it creates into this buffer. </p>
</div><h2>Constructor &amp; Destructor Documentation</h2>
<a class="anchor" id="a8583220986b69727f8f5a9ace9b19e5d"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">flitr::ImageProducer::ImageProducer </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a class="anchor" id="a6c3207104e7872fce9f98e5bd637b58b"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual flitr::ImageProducer::~ImageProducer </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<h2>Member Function Documentation</h2>
<a class="anchor" id="a3e642e35715da06dc327e71c92c6e848"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool flitr::ImageProducer::addConsumer </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="classflitr_1_1_image_consumer.html">ImageConsumer</a> &amp;&#160;</td>
          <td class="paramname"><em>consumer</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Called when a new consumer is added.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">consumer</td><td>Consumer that was added.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether the add was successful. </dd></dl>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><img src="classflitr_1_1_image_producer_a3e642e35715da06dc327e71c92c6e848_icgraph.png" border="0" usemap="#classflitr_1_1_image_producer_a3e642e35715da06dc327e71c92c6e848_icgraph" alt=""/></div>
<map name="classflitr_1_1_image_producer_a3e642e35715da06dc327e71c92c6e848_icgraph" id="classflitr_1_1_image_producer_a3e642e35715da06dc327e71c92c6e848_icgraph">
<area shape="rect" id="node3" href="classflitr_1_1_image_consumer.html#a58f2c3e5758b892ebeff2188aab0a024" title="flitr::ImageConsumer\l::ImageConsumer" alt="" coords="189,5,333,51"/></map>
</div>
</p>

</div>
</div>
<a class="anchor" id="a9495277a8122ec0f7cfb63dc83ceb955"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual <a class="el" href="classflitr_1_1_image_format.html">ImageFormat</a> flitr::ImageProducer::getFormat </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>index</em> = <code>0</code></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Obtain the format of an image produced into a specific index of a slot in the buffer.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">index</td><td>Index in the slot. From 0 to one less than images in a slot.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Format of the image. </dd></dl>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><img src="classflitr_1_1_image_producer_a9495277a8122ec0f7cfb63dc83ceb955_icgraph.png" border="0" usemap="#classflitr_1_1_image_producer_a9495277a8122ec0f7cfb63dc83ceb955_icgraph" alt=""/></div>
<map name="classflitr_1_1_image_producer_a9495277a8122ec0f7cfb63dc83ceb955_icgraph" id="classflitr_1_1_image_producer_a9495277a8122ec0f7cfb63dc83ceb955_icgraph">
<area shape="rect" id="node3" href="classflitr_1_1_multi_c_p_u_histogram_consumer.html#a3acd2aaf0b6a9d2149596f0136bb11d8" title="flitr::MultiCPUHistogram\lConsumer::MultiCPUHistogramConsumer" alt="" coords="189,5,456,51"/><area shape="rect" id="node5" href="classflitr_1_1_multi_f_fmpeg_consumer.html#a16ef68c85f14b667db39dfd8597b2f78" title="flitr::MultiFFmpegConsumer\l::MultiFFmpegConsumer" alt="" coords="231,74,415,121"/><area shape="rect" id="node7" href="classflitr_1_1_multi_f_fmpeg_producer.html#abf37f13ec1daab0bf4adf1f923503707" title="flitr::MultiFFmpegProducer\l::MultiFFmpegProducer" alt="" coords="235,143,411,190"/><area shape="rect" id="node9" href="classflitr_1_1_t_multi_o_s_g_consumer.html#a1782598170c252762aa43d0b6a343d77" title="flitr::TMultiOSGConsumer\l::TMultiOSGConsumer" alt="" coords="236,213,409,259"/><area shape="rect" id="node11" href="classflitr_1_1_screen_capture_producer_1_1_screen_capture_callback.html#a3d7bb6b53dbd25cab83cfefc7725a6a4" title="flitr::ScreenCaptureProducer\l::ScreenCaptureCallback:\l:ScreenCaptureCallback" alt="" coords="229,283,416,347"/><area shape="rect" id="node13" href="classflitr_1_1_shared_image_buffer.html#aba6c3ad90a690a4b8228d844777a30cb" title="flitr::SharedImageBuffer\l::initWithStorage" alt="" coords="243,370,403,417"/><area shape="rect" id="node15" href="classflitr_1_1_s_multi_f_fmpeg_producer.html#a1a139fcac7a0a096bc0e964690010f57" title="flitr::SMultiFFmpegProducer\l::init" alt="" coords="231,439,415,486"/></map>
</div>
</p>

</div>
</div>
<a class="anchor" id="ada8987ae6f2e72ada31d702816b1e164"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual uint32_t flitr::ImageProducer::getLeastNumReadSlotsAvailable </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Find the least number of readable image slots available between all consumers.</p>
<dl class="section return"><dt>Returns</dt><dd>Least number of read slots available. </dd></dl>

</div>
</div>
<a class="anchor" id="a5b34bbd15e5e3f50cec63bb4b7180356"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual uint32_t flitr::ImageProducer::getNumWriteSlotsAvailable </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td> const</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Obtain the number of write slots that can be reserved.</p>
<dl class="section return"><dt>Returns</dt><dd>The number of available write slots. </dd></dl>

</div>
</div>
<a class="anchor" id="a0bb6c0260a3bf3f4da7e362f579db4c9"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool flitr::ImageProducer::init </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">pure virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>Implemented in <a class="el" href="classflitr_1_1_texture_capture_producer.html#af379213377224f6df93a37131d087989">flitr::TextureCaptureProducer</a>, <a class="el" href="classflitr_1_1_multi_f_fmpeg_producer.html#a1d037bc608bf8228241a1e5dd06efb07">flitr::MultiFFmpegProducer</a>, <a class="el" href="classflitr_1_1_screen_capture_producer.html#af6b5f27bb8f67ff5672bc5fd89a36228">flitr::ScreenCaptureProducer</a>, <a class="el" href="classflitr_1_1_f_fmpeg_producer.html#a7b690142fd60cd615253bff0fb0f3ebc">flitr::FFmpegProducer</a>, <a class="el" href="classflitr_1_1_s_multi_f_fmpeg_producer.html#a1a139fcac7a0a096bc0e964690010f57">flitr::SMultiFFmpegProducer</a>, and <a class="el" href="class_test_producer.html#abdc75ab1a5204a99aa2e333a7e7e5f00">TestProducer</a>.</p>

</div>
</div>
<a class="anchor" id="a01eb729f570f48453719a037c4dd85d9"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void flitr::ImageProducer::releaseReadSlotCallback </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Called when all consumers are done with the oldest available slot. This can be used when we are reading from another producer/producers and must release a read slot. </p>

<p>Reimplemented in <a class="el" href="classflitr_1_1_multi_f_fmpeg_producer.html#a1b419af1100c587dfed05755d2a4e2f7">flitr::MultiFFmpegProducer</a>, and <a class="el" href="class_test_producer.html#a34084f74e05f1d67a4f9aeb6d2df532a">TestProducer</a>.</p>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><img src="classflitr_1_1_image_producer_a01eb729f570f48453719a037c4dd85d9_icgraph.png" border="0" usemap="#classflitr_1_1_image_producer_a01eb729f570f48453719a037c4dd85d9_icgraph" alt=""/></div>
<map name="classflitr_1_1_image_producer_a01eb729f570f48453719a037c4dd85d9_icgraph" id="classflitr_1_1_image_producer_a01eb729f570f48453719a037c4dd85d9_icgraph">
<area shape="rect" id="node3" href="classflitr_1_1_shared_image_buffer.html#a7ba7642014e9d00d4529e0c2da41d817" title="flitr::SharedImageBuffer\l::releaseReadSlot" alt="" coords="232,5,392,51"/></map>
</div>
</p>

</div>
</div>
<a class="anchor" id="a5dd9a012d296b7bdb7df86d59f3f1b91"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void flitr::ImageProducer::releaseWriteSlot </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Indicate that the producer has finished with a reserved write slot. Should only be called after a slot has been reserved and once for each slot that was reserved. </p>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><img src="classflitr_1_1_image_producer_a5dd9a012d296b7bdb7df86d59f3f1b91_icgraph.png" border="0" usemap="#classflitr_1_1_image_producer_a5dd9a012d296b7bdb7df86d59f3f1b91_icgraph" alt=""/></div>
<map name="classflitr_1_1_image_producer_a5dd9a012d296b7bdb7df86d59f3f1b91_icgraph" id="classflitr_1_1_image_producer_a5dd9a012d296b7bdb7df86d59f3f1b91_icgraph">
<area shape="rect" id="node3" href="structflitr_1_1_texture_capture_producer_1_1_texture_capture_draw_callback.html#a2d91effe8069e501df546bdbe3508d9b" title="flitr::TextureCaptureProducer\l::TextureCaptureDrawCallback\l::operator()" alt="" coords="189,5,392,69"/><area shape="rect" id="node5" href="classflitr_1_1_f_fmpeg_producer.html#a5dcce214520a811994878e2ed32d91a7" title="flitr::FFmpegProducer\l::seek" alt="" coords="217,93,364,139"/><area shape="rect" id="node9" href="classflitr_1_1_multi_f_fmpeg_producer.html#a306345677c0d8a8254ecd6dedca742f2" title="flitr::MultiFFmpegProducer\l::seek" alt="" coords="203,162,379,209"/><area shape="rect" id="node13" href="classflitr_1_1_s_multi_f_fmpeg_producer.html#a905d9e1ce3492c2ca174197577796efd" title="flitr::SMultiFFmpegProducer\l::seek" alt="" coords="199,231,383,278"/><area shape="rect" id="node7" href="classflitr_1_1_f_fmpeg_producer.html#a2dd4099b87c7bc4e3593c54d972139a2" title="flitr::FFmpegProducer\l::trigger" alt="" coords="460,93,607,139"/><area shape="rect" id="node11" href="classflitr_1_1_multi_f_fmpeg_producer.html#a912f65e5e7043db78d6550a7130aaf05" title="flitr::MultiFFmpegProducer\l::trigger" alt="" coords="445,162,621,209"/><area shape="rect" id="node15" href="classflitr_1_1_s_multi_f_fmpeg_producer.html#a52858f30d25807c17177e56db48cad5f" title="flitr::SMultiFFmpegProducer\l::trigger" alt="" coords="441,231,625,278"/></map>
</div>
</p>

</div>
</div>
<a class="anchor" id="a50cb5b2cd533974cddfa7561e2dd743a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual std::vector&lt;<a class="el" href="classflitr_1_1_image.html">Image</a>**&gt; flitr::ImageProducer::reserveWriteSlot </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">protected</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Reserve (obtain) a slot for writing new image data. Multiple slots can be reserved before any are released.</p>
<dl class="section return"><dt>Returns</dt><dd>A vector with pointers to image pointers where data can be written. The size would match the number of images per slot for this buffer. An empty vector if no slot could be obtained (buffer full or readers busy with all slots). </dd></dl>

<p><div class="dynheader">
Here is the caller graph for this function:</div>
<div class="dyncontent">
<div class="center"><img src="classflitr_1_1_image_producer_a50cb5b2cd533974cddfa7561e2dd743a_icgraph.png" border="0" usemap="#classflitr_1_1_image_producer_a50cb5b2cd533974cddfa7561e2dd743a_icgraph" alt=""/></div>
<map name="classflitr_1_1_image_producer_a50cb5b2cd533974cddfa7561e2dd743a_icgraph" id="classflitr_1_1_image_producer_a50cb5b2cd533974cddfa7561e2dd743a_icgraph">
<area shape="rect" id="node3" href="structflitr_1_1_texture_capture_producer_1_1_texture_capture_draw_callback.html#a2d91effe8069e501df546bdbe3508d9b" title="flitr::TextureCaptureProducer\l::TextureCaptureDrawCallback\l::operator()" alt="" coords="189,5,392,69"/><area shape="rect" id="node5" href="classflitr_1_1_f_fmpeg_producer.html#a5dcce214520a811994878e2ed32d91a7" title="flitr::FFmpegProducer\l::seek" alt="" coords="217,93,364,139"/><area shape="rect" id="node9" href="classflitr_1_1_multi_f_fmpeg_producer.html#a306345677c0d8a8254ecd6dedca742f2" title="flitr::MultiFFmpegProducer\l::seek" alt="" coords="203,162,379,209"/><area shape="rect" id="node13" href="classflitr_1_1_s_multi_f_fmpeg_producer.html#a905d9e1ce3492c2ca174197577796efd" title="flitr::SMultiFFmpegProducer\l::seek" alt="" coords="199,231,383,278"/><area shape="rect" id="node7" href="classflitr_1_1_f_fmpeg_producer.html#a2dd4099b87c7bc4e3593c54d972139a2" title="flitr::FFmpegProducer\l::trigger" alt="" coords="460,93,607,139"/><area shape="rect" id="node11" href="classflitr_1_1_multi_f_fmpeg_producer.html#a912f65e5e7043db78d6550a7130aaf05" title="flitr::MultiFFmpegProducer\l::trigger" alt="" coords="445,162,621,209"/><area shape="rect" id="node15" href="classflitr_1_1_s_multi_f_fmpeg_producer.html#a52858f30d25807c17177e56db48cad5f" title="flitr::SMultiFFmpegProducer\l::trigger" alt="" coords="441,231,625,278"/></map>
</div>
</p>

</div>
</div>
<a class="anchor" id="a636b354578c50ba0ca2b7bd4f98842fc"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool flitr::ImageProducer::seek </td>
          <td>(</td>
          <td class="paramtype">uint32_t&#160;</td>
          <td class="paramname"><em>position</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Implemented for producers where a specific image at a location can be requested.</p>
<dl class="params"><dt>Parameters</dt><dd>
  <table class="params">
    <tr><td class="paramname">position</td><td>The position in the file/stream to obtain.</td></tr>
  </table>
  </dd>
</dl>
<dl class="section return"><dt>Returns</dt><dd>Whether an image was produced. </dd></dl>

<p>Reimplemented in <a class="el" href="classflitr_1_1_multi_f_fmpeg_producer.html#a306345677c0d8a8254ecd6dedca742f2">flitr::MultiFFmpegProducer</a>, <a class="el" href="classflitr_1_1_f_fmpeg_producer.html#a5dcce214520a811994878e2ed32d91a7">flitr::FFmpegProducer</a>, and <a class="el" href="classflitr_1_1_s_multi_f_fmpeg_producer.html#a905d9e1ce3492c2ca174197577796efd">flitr::SMultiFFmpegProducer</a>.</p>

</div>
</div>
<a class="anchor" id="a2b781f13e6fdf65609fbb2ac3f6419c5"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual void flitr::ImageProducer::setCreateMetadataFunction </td>
          <td>(</td>
          <td class="paramtype"><a class="el" href="namespaceflitr.html#a4809c2cffdcf7a5370102b956fcd09dc">CreateMetadataFunction</a>&#160;</td>
          <td class="paramname"><em>f</em></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a class="anchor" id="af86fed83f474ab9889ab9502776908b8"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">virtual bool flitr::ImageProducer::trigger </td>
          <td>(</td>
          <td class="paramname"></td><td>)</td>
          <td></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">inline</span><span class="mlabel">virtual</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>Typically implemented to tell an asynchronous producer to create an image.</p>
<dl class="section return"><dt>Returns</dt><dd>Whether an image was produced. </dd></dl>

<p>Reimplemented in <a class="el" href="classflitr_1_1_multi_f_fmpeg_producer.html#a912f65e5e7043db78d6550a7130aaf05">flitr::MultiFFmpegProducer</a>, <a class="el" href="classflitr_1_1_f_fmpeg_producer.html#a2dd4099b87c7bc4e3593c54d972139a2">flitr::FFmpegProducer</a>, and <a class="el" href="classflitr_1_1_s_multi_f_fmpeg_producer.html#a52858f30d25807c17177e56db48cad5f">flitr::SMultiFFmpegProducer</a>.</p>

</div>
</div>
<h2>Friends And Related Function Documentation</h2>
<a class="anchor" id="aeeb1f6ea1886f315310caaf57b3064bd"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">friend class <a class="el" href="classflitr_1_1_image_consumer.html">ImageConsumer</a></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<a class="anchor" id="a18f6db6520dbb1db232988e6ad29e289"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">friend class <a class="el" href="classflitr_1_1_shared_image_buffer.html">SharedImageBuffer</a></td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">friend</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

</div>
</div>
<h2>Member Data Documentation</h2>
<a class="anchor" id="a16f3600ed2852ed26b9d77bd760d897a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname"><a class="el" href="namespaceflitr.html#a4809c2cffdcf7a5370102b956fcd09dc">CreateMetadataFunction</a> flitr::ImageProducer::CreateMetadataFunction_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">
<p>An optional function that gets called as soon as an image is produced. Used to create the image metadata. </p>

</div>
</div>
<a class="anchor" id="a72e945d24bb382258f9a0630fb48398a"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::vector&lt;<a class="el" href="classflitr_1_1_image_format.html">ImageFormat</a>&gt; flitr::ImageProducer::ImageFormat_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>A vector of the formats of the images is produced per slot. </p>

</div>
</div>
<a class="anchor" id="aab3c5af29ab27646422bb9c182be0464"></a>
<div class="memitem">
<div class="memproto">
<table class="mlabels">
  <tr>
  <td class="mlabels-left">
      <table class="memname">
        <tr>
          <td class="memname">std::tr1::shared_ptr&lt;<a class="el" href="classflitr_1_1_shared_image_buffer.html">SharedImageBuffer</a>&gt; flitr::ImageProducer::SharedImageBuffer_</td>
        </tr>
      </table>
  </td>
  <td class="mlabels-right">
<span class="mlabels"><span class="mlabel">protected</span></span>  </td>
  </tr>
</table>
</div><div class="memdoc">

<p>The shared buffer used for this producer and all consumers. </p>

</div>
</div>
<hr/>The documentation for this class was generated from the following file:<ul>
<li>include/flitr/<a class="el" href="image__producer_8h_source.html">image_producer.h</a></li>
</ul>
</div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="namespaceflitr.html">flitr</a></li><li class="navelem"><a class="el" href="classflitr_1_1_image_producer.html">ImageProducer</a></li>
    <li class="footer">Generated on Thu Dec 6 2012 09:15:45 for FLITr by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.1.2 </li>
  </ul>
</div>
</body>
</html>
